package yang.VirtualMachine.chapter4;

import java.lang.ref.SoftReference;

/**
 * 软引用为比强应用若一点的引用
 * 堆内存空间不足时，则回收
 * 可以和引用队列配合使用
 * @author xinxin
 */
public class SoftRef {
	
	public static class User{
		public int id;
		public String name;
		public User(int id, String name) {
			this.id = id;
			this.name = name;
		}
		@Override
		public String toString() {
			return "[id=" + String.valueOf(id) + ",name=" + name + "]";
		}
	}

	public static void main(String[] args) {
		User u = new User(1, "yxx");
		SoftReference<User> userSoftRef = new SoftReference<>(u);
		u = null;
		
		System.out.println(userSoftRef.get());// 有值
		System.gc();
		System.out.println("After GC:");
		System.out.println(userSoftRef.get());// 堆内存充裕，有值
		
		byte[] b = new byte[1024*7*948];// 不同虚拟机使用-Xmx10m时此参数需调整
		System.gc();
		System.out.println(userSoftRef.get());// 内存不足，GC收回
	}

}
